┴ COMPUTER CAN BE USED TO TABULATE ANSWERS TO SURVEYS OR TESTS WHICH HAVE SPECIFIC ANSWERS RATHER THAN SENTENCES OR RANGES OF NUMBERS. ╘ABULATING SURVEYS IS TEDIOUS AND ERROR-PRONE WORK. ╬OW YOU CAN DO IT WITH LITTLE EFFORT, RIGHT IN THE COMFORT OF YOUR HOME!
╧FTEN THE ANSWERS ARE OF THE YES-NO OR TRUE-FALSE VARIETY. ╙OMETIMES THEY ARE IN MULTIPLE CHOICE FORMAT, WITH ANSWERS CODED BY LETTERS A,B,C,D AND SO ON.
╨ERHAPS WE'RE NOT EVEN DEALING WITH SERIOUS SURVEYS. ╨ERHAPS WE HAVE A SCHEDULING PROBLEM FOR A VERY IMPORTANT CLUB MEETING. ╟IVEN A DOZEN PEOPLE, IT IS NOT EASY TO PICK A DAY AND TIME THAT SUITS EVERYBODY. ┘OU HEAR, "╙ORRY, ╔ FISH ╞RIDAYS" OR "╔ CAN'T MAKE IT ╘HURSDAY AT 5" AND ROUND AND ROUND, WHILE EVERYBODY IS GETTING CONFUSED IN THEIR CALENDAR READING.
╘HIS AND SIMILAR QUESTIONS, IF THEY CAUSE YOU TROUBLE, CAN BE ANSWERED WITH THE HELP OF A LITTLE COMPUTER. ╔F YOU MANAGE TO TABULATE PEOPLE AND THEIR PREFERENCES FOR ISSUES, DATES OR TIMES, YOU CAN THEN ASK THE COMPUTER TO PINPOINT THE SOLUTION. ╠ET'S DO IT.
╔N A ONE-SHOT DEAL, SUCH AS THE SCHEDULING PROBLEM, YOU CAN TYPE IN THE DATA INTO THE PROGRAM. ╔F YOU ARE DEALING WITH SURVEYS, YOU CAN DO THE SAME, OR YOU CAN HOLD THE DATA ON A CASSETTE TAPE OR DISK. ╘HIS PROGRAM SHOWS ─┴╘┴ LINES, FOR SIMPLICITY.
// PRG: Y/NTAB+MATCH //
Ç*FP12
*** ╓┴╥╔┴┬╠┼╙ ***
═$ PATTERN STRING (MASK)
╠╬ ITS LENGTH IN CHARACTERS
╘() NUMBER OF "1" ANSWERS PER QUESTION
IN THE WHOLE DATA
─╓ SCREEN OR PRINTER OUTPUT DEVICE
═╘$ MESSAGE TO PRINT
╦╘ COUNT OF ITEMS
╓$ WORKING VALUE, WHAT WE READ IN
┴$ WORKING VALUE, ONE CHARACTER IN ╓$
╙ SUM OF MATCHES
*** ╔╬╙╘╥╒├╘╔╧╬╙ ***
┘OU DO NOT HAVE TO TYPE SPACES AND THE COLONS AT THE BEGINNING OF EACH LINE. ╘HEY ARE ONLY USED TO INDENT THE LOOPS SO YOU CAN SEE BETTER WHAT IS GOING ON.
╘HERE ARE TWO OPTIONS ALREADY CODED IN FOR YOU, FOR DIFFERENT WAYS OF TABULATING. ╞OLLOW THE LOGIC BELOW TO SEE WHAT TO DO.
╘HERE IS NO INPUT TO THE PROGRAM. ┘OU CAN MODIFY THE PROGRAM SO YOU CAN PRACTICE THE AVAILABLE OPTIONS BY CHANGING THE CODE AND THE DATA.
╥╒╬ THE PROGRAM. ╘HE OUTPUT WILL LOOK LIKE THE ILLUSTRATION SHOWN LATER ON THIS THIS SECTION. ╘HE PROGRAM STOPS BY ITSELF.
*** ─┼╘┴╔╠╙ ***
╫E HAVE EIGHT PEOPLE (DOWN), WHOSE ANSWERS TO SEVEN YES-NO QUESTIONS (FIELDS) GO FROM LEFT TO RIGHT. ╧R WE MAY HAVE A LIST OF EIGHT CITIES AND THEIR SEVEN CHARACTERISTICS. ╔T COULD BE A PANEL OF LIGHTS INDICATING SPECIFIC CONDITIONS IN SOME MACHINE. ╘HE PROGRAM DOESN'T KNOW WHAT THE SUBJECT MATTER OF THE TEST IS. ┴LL IT CARES IS THAT WE GIVE IT A CONSISTENT LIST OF ONES AND ZEROS TO WORK WITH.
╬EEDLESS TO SAY, YOU ARE NOT LIMITED TO 8 PEOPLE, NOR 7 QUESTIONS. ╬UMBER OF QUESTIONS ACROSS EACH RECORD IS DEFINED BY ╠╬, THE LENGTH OF THE CHARACTER STRING IN ─┴╘┴ LINE 9000. ╬UMBER OF SUCH RECORDS IS IN YOUR HANDS. ╙O LONG AS THE LAST DATA LINE CONTAINS "┌┌┌", YOU CAN WRITE AS MANY AS YOU WISH.
┴PPROXIMATELY HOW MANY? ╥ULE OF THUMB: IF ╪=╞╥┼(0), WHICH IS AVAILABLE MEMORY, WE CAN HAVE
╬╥=╞╥┼(0)/(╠╬+5+2)-7*╠╬
SUCH RECORDS. ╫E NEED TO BALANCE RECORD LENGTH WITH THE NUMBER OF RECORDS, OF COURSE: THE MORE QUESTIONS YOU ASK, THE FEWER PEOPLE YOU CAN HANDLE. ╔F YOU ASK 30 QUESTIONS, THEN IN THE ├OMMODORE-16 COMPUTER YOU COULD HANDLE ABOUT 80 PEOPLE. ╔N A ╨LUS4 MACHINE, THIS COMES OUT TO OVER 1000 PEOPLE.
╘HE ROUTINE FIRST TABULATES THE TOTAL NUMBER OF YES-ANSWERS ACROSS THE 7 QUESTIONS. ╚ERE, THE SCREEN SHOWS 4 FOR EACH QUESTION. ╘HIS IS DONE IN LINES 140-210. ╘HE RECORDS ARE READ IN AND CHECKED FOR THE PRESENCE OF "1".
╬OW THE FUN BEGINS. ╫E CAN PULL ALL THE RECORDS THAT MATCH A CERTAIN COMBINATION OF ANSWERS. ╔N ADDITION TO FEEDING THE COMPUTER THE PEOPLE-RECORDS, WE GIVE IT A PATTERN OF ANSWERS WE'RE INTERESTED IN. ╫E CALL THIS PATTERN A "MASK". ╘HE PATTERN IS IN THE FIRST DATA LINE WHICH CONTAINS SEVERAL STARS. ╙TARS INDICATE "DON'T CARE FIELDS", ITEMS WE ARE NOT CURRENTLY INTERESTED IN. ┘OU CAN SEE THAT WE HAVE AN INTEREST IN ITEMS 3, 4 AND 6.
╘WO MATCHING OPTIONS ARE CODED. ╘HE PROGRAM IS THE SAME FOR BOTH, WITH THE EXCEPTION OF LINES 280-290. ─EPENDING ON WHAT WE WANT TO DO WE CAN USE EITHER LINE OF CODE BY MAKING THE LINE WE DO NOT WANT A ╥┼═ARK STATEMENT.
(1) ╫HEN LINE 280 HAS NO ╥┼═ ON IT, AND LINE 290 DOES, WE CAN PULL ALL THE RECORDS THAT ANSWERED "YES" TO QUESTION 3, ┴╬─ "YES" TO QUESTION 4, ┴╬─ "NO" TO QUESTION 6. ╘HE "┴╬─" IDEA MEANS THAT ALL THE ANSWERS MUST MATCH THE CRITERIA LIST. ╔N THIS EXAMPLE, RECORDS NUMBER 4 AND 7 ARE SHOWN, AS THEY ARE THE ONLY ONES THAT MEET THIS CRITERION.
// PIC: Y/N.1 //
(2) ╫HEN LINE 290 HAS NO ╥┼═ ON IT, AND LINE 280 DOES, WE PULL ALL THE RECORDS THAT HAVE "YES" ON QUESTION 3, ╧╥ "YES" ON QUESTION 4, ╧╥ "NO" ON QUESTION 6. ╘HE "╧╥" IDEA IS DEFINED AS "DO ANY ANSWERS MATCH?" - SO LONG AS AT LEAST ONE ANSWER MATCHES, THE RECORD GETS FLAGGED. ╔N THIS EXAMPLE THE LIST SHOWS SIX OF THE EIGHT RECORDS MEETING THIS CRITERION.
// PIC: Y/N.2 //
*** ─┼╘┴╔╠╙ ┴╬─ ═╧╥┼ ╨╥╧╩┼├╘╙ ***
╘HIS IS A LAZY WAY OF WRITING CODE - ONE PROGRAM FOR TWO THINGS, BUT IT MAKES IT EASY TO TYPE IN AND TALK ABOUT. ╫HEN YOU FEEL AMBITIOUS IN YOUR CODING EFFORTS, YOU COULD INCLUDE A QUESTION "WHAT SORT OF MATCHING DO YOU WANT" AND LET THE COMPUTER DECIDE WHETHER TO USE LINE 280 OR 290. ╚AVE FUN!
┘OU MAY ALSO TRY TO REWRITE THE PROGRAM TO INPUT THE MASK OR THE PATTERN STRING, ═$ AND TO ELIMINATE IT FROM THE ─┴╘┴ LINES. ┘OU COULD THEN RECYCLE THROUGH LINES 220-300 WITHOUT USING THE INITIAL TABULATION IN LINES 140-200 AGAIN.
╘HE MATCHING IS DONE BY FIRST DECIDING WHETHER WE ARE DEALING WITH A NON-STAR CHARACTER (LINE 250). ╔F IT IS A STAR WE COUNT IT INTO ╙, AND SKIP TO THE NEXT CHARACTER. ╧THERWISE, WE COMPARE IF A PARTICULAR CHARACTER IS THE SAME IN BOTH THE MASK AND THE RECORD. ╔F YES, ═╞ IS INCREASED.
╫HEN WE ARE INTERESTED IN AN EXACT MATCH OF ALL NON-STAR CHARACTERS (LINE 280), WE CHECK IF ╙ AND ═╞ ADD UP TO THE LENGTH OF THE STRING. ╔F YES, WE HAVE AN EXACT MATCH.
┴LTERNATIVELY, IF WE ARE TRYING TO ANSWER THE QUESTION WHETHER THERE ARE JUST ANY MATCHES (LINE 290), WE SIMPLY LOOK AT ═╞. ╔F IT IS NOT ZERO, WE KNOW AT LEAST ONE ANSWER MATCHED.
╙UGGESTED VARIATIONS ON THIS THEME: ├AN YOU THINK OF A WAY TO HANDLE MULTIPLE CHOICE, A,B,C,D,E, TYPE OF ANSWERS? ├OULD YOU TOTAL THE NUMBER OF PEOPLE THAT MATCH A CRITERION IN THE MASK STRING? ├AN YOU TELL HOW MANY DID NOT MATCH? ╫HAT WILL THE RESULT BE IF THE MASK CONTAINED ALL ONES? ALL ZEROS? ╩UST ONE "1"? ╚INT: IT JUST MIGHT DO THE SAME THING AS IS DONE IN LINES 160-190. ╘RY IT.
┘OU MIGHT WANT TO LOOK UP IN THE MANUAL THAT CAME WITH THE COMPUTER INFORMATION ABOUT MEMORY USE. ╔N THE EXAMPLE ABOVE, EACH TOTAL TAKES UP SEVEN BYTES OF STORAGE. ┼ACH PROGRAM LINE, AND THAT INCLUDES ─┴╘┴ LINES HAS AN OVERHEAD OF FIVE BYTES BEYOND THE LENGTH OF STRING, PLUS THE TWO QUOTES.
╙INCE WE HAVE USED DATA FROM WITHIN A PROGRAM, RATHER THAN A FILE ON TAPE OR DISK, WE CAN REREAD THE DATA OVER AND OVER AGAIN. ╙O WE DO NOT NEED ANY TABLES OF VALUES. ╘O REREAD DATA FROM A PARTICULAR LINE, ╥┼╙╘╧╥┼ <LINE NUMBER> IS USED (SEE LINE 210). ┘OU MAY WISH TO STUDY THAT COMMAND IN MORE DETAIL AT A LATER TIME.
┘OU MAY WISH TO READ ABOUT A ╥╒╬ COMMAND. ╫HAT DOES IT DO TO VARIABLES? ─O WE HAVE TO SET FIELD TOTALS TO ZERO BEFORE RUNNING THE PROGRAM. ╫HY OR WHY NOT? ╫HAT DOES A ├╠╥ COMMAND DO AFTER A PROGRAM HAS RUN? ╚INT: TRY PRINTING A VALUE, SUCH AS ╦╘ AND SEE FOR YOURSELF.